package com.huan;

//serverSocket

import org.apache.log4j.Logger;

import java.io.IOException;
import java.io.OutputStream;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test3_TimeServer {
    private static Logger logger = Logger.getLogger(Test3_TimeServer.class.getName());
    public static void main(String[] args) throws IOException {
        //创建服务器socket的三个方案
        /**
         * 方案一：
         * 直接指定一个端口
         * 方案二：
         * 循环10000至65535，试出一个空闲的端口
         * 方案三：
         * 将端口配置在一个 xml/properties 文件中（实际开发中常用）
         */
        final int port = 10000;
        ServerSocket ss = null;
        for (int i=port;i<65535;i++){
            try {
                //完成一台时间服务器，选择空闲端口
                ss = new ServerSocket(i);
                break;
            }catch (Exception e){
                if (e instanceof BindException){
                    //用错误日志记录端口被占用的信息
                    logger.error("端口："+i+"已经被占用");
                }
            }
        }
        //用info级别记录 ServerSocket套接字创建成功的信息
        logger.info(ss.getInetAddress().getHostName()+"启动了，监听端口号："+ss.getLocalPort());
        DateFormat dateFormat = new SimpleDateFormat("yyyy年-MM月-dd日 HH:mm:ss");
        Date d = null;
        String time = null;

        while (true){
            logger.info("服务器ServerSocket准备等待客户端的连接");
            //只要有一个客户端连接到服务器，获取一个与客户端的套接字Socket对象
            Socket s = ss.accept();//阻塞式方法
            logger.info("（理解阻塞的意思。。。）获取了一个与客户端："+s.getRemoteSocketAddress()+"的连接");

            //TODO： 服务器中的业务
            d = new Date();
            time = dateFormat.format(d);

            //套接字编程的底层就是io
            try(OutputStream outputStream = s.getOutputStream()){
                outputStream.write(time.getBytes());
                outputStream.flush();
            }catch (Exception e){
                e.printStackTrace();
            }
            s.close();
            logger.info("服务器断开与客户端的连接");
        }
    }
}
